package com.edu.d5_collection_update_delete;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.function.Consumer;

public class Test {
    /**
     * List集合中边遍历边删除
     */
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("程序员");
        list.add("123");
        list.add("123");
        list.add("奥特曼");
        list.add("迪迦");
        System.out.println(list);
        /**
         * 需求：删除全部的123
         */
        /**
         * 1、使用迭代器进行删除
         */
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String next = iterator.next();
            if(next.equals("123")){
                //list.remove(next);//直接使用集合自带的会出现漏删现象，出现bug,删除的同时，索引后移了，漏过去了
                iterator.remove();//使用迭代器删除，保证不会后移，能够成功遍历
            }
        }
        System.out.println(list);
/*
        *//**
         * 2、使用forEach（）进行遍历删除(会出现bug)
         *//*
        for (String s : list) {
            list.remove("123");一定会出现索引跳过的bug，不能用于边遍历边删除
        }*/

        /**
         *3、使用Lambda表达式进行遍历删除(会出现bug)
         */
        /*list.forEach(s ->list.remove("123"));*/

        /**
         * 4、使用for循环遍历删除
         */
        //正着删除
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).equals("123")){
                list.remove(i);
                i--;
            }
        }
        System.out.println(list);

        //倒着删除
        for (int i = list.size()-1; i >=0; i--) {
            if(list.get(i).equals("123")){
                list.remove(i);
            }
        }
        System.out.println(list);
    }
}
